/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.proyecto.dal;
import com.proyecto.bl.Documento;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import com.proyecto.bl.Usuario;
import java.sql.CallableStatement;  
import java.sql.SQLException;  
import java.util.ArrayList;
import com.proyecto.bl.Usuario;
import java.sql.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;


/**
 *
 * @author felipe
 */
public class DocumentoDao {
    
    DatabaseUtil data;

 
private void asignarSolicitudes(ArrayList documentos,String id) throws SQLException{
     Connection con = null;  
     CallableStatement stmt = null;  
     ResultSet rs = null;  
     
      try {  
          for(int i = 0;i <documentos.size();i++){
            
            con = new DatabaseUtil().getConection();  
            stmt = con.prepareCall("{call consultar_solicitud_id_usuario (?,?)}");  
            stmt.setString(1, ((Documento)documentos.get(i)).getIdDocumento());
            stmt.setString(2,id);
            rs = stmt.executeQuery();
            
            while(rs.next()){
             String ejem = rs.getString(4); 
             String sol = rs.getString(1);              
            ((Documento)documentos.get(i)).setIdSolicitud(sol);
            ((Documento)documentos.get(i)).setIdEjemplar(ejem);

            }
                    
            rs.close();

            }
      }
      
      catch (SQLException ex) {  
           throw new SQLException(ex);  
        }  
      finally{
          con.close();
      }
      
   
    }
 


public void cancelarSolicitud(String idSolicitud) throws SQLException{
    Connection con = null;  
     CallableStatement stmt = null;  
     ResultSet rs = null;  
     
      try {  
            con = new DatabaseUtil().getConection();  
            stmt = con.prepareCall("{call eliminar_solicitud (?)}"); 
            stmt.setString(1, idSolicitud);
            stmt.execute();

            }
      
      catch (SQLException ex) {  
           throw new SQLException(ex);  
        }  
      finally{
          con.close();
      }
}
    
	
public void realizarSolicitud(String idUser, String idDocumento) throws SQLException{
	 Connection con = null;  
     CallableStatement stmt = null;  
     ResultSet rs = null;  
     
      try {  
            con = new DatabaseUtil().getConection();  
            ArrayList ejemplares = new ArrayList();
            stmt = con.prepareCall("{call registrar_solicitud (?, ?, ?, ?)}"); 
            GregorianCalendar vencimiento = new GregorianCalendar(); 
            vencimiento.add(Calendar.DAY_OF_MONTH, 1); 
            java.util.Date a = new java.util.Date(vencimiento.getTimeInMillis());
            stmt.setDate(1, new Date(new java.util.Date().getTime()));
            stmt.setDate(2, new Date(a.getTime()));
            stmt.setString(3, idUser);
            stmt.setString(4, idDocumento);
            
            stmt.execute();

            }
      
      catch (SQLException ex) {  
           throw new SQLException(ex);  
        }  
      finally{
          con.close();

      }
	}
    
	

public void buscarSolicitudes(ArrayList documentos,String id) throws Exception {
      
     Connection con = null;  
     CallableStatement stmt = null;  
     ResultSet rs = null;  
     
      try {  
            con = new DatabaseUtil().getConection();  
            stmt = con.prepareCall("{call consultar_reserva_id (?)}"); 
            stmt.setString(1,id);
            rs = stmt.executeQuery();
            

        while(rs.next()){
             Documento documento= new Documento();
            documento.setIdDocumento(rs.getString(1));
            documento.setTitulo(rs.getString(2));
            documento.setVirtual(rs.getBoolean(3));
            documento.setDescriptores(rs.getString(4));
            documento.setClasificacion(rs.getString(5));
            documento.setSerie(rs.getString(6));
            documento.setTotales(rs.getInt(7));
            documento.setSolicitados(rs.getInt(8));
            documento.setPrestados(rs.getInt(9));
            documento.setIdTipoDocumento(rs.getString(10));
            documento.setIdEditorial(rs.getString(11));
            documento.setAutor(rs.getString(12));
            documentos.add(documento);
            }     
            rs.close();

            }
      
      catch (SQLException ex) {  
           throw new SQLException(ex);  
        }  
      finally{
          con.close();
          if(documentos.size()>0){
            asignarSolicitudes(documentos,id);
          }
      }
   
    }
    
    public void buscarPorTitulo(ArrayList documentos,String titulo) throws Exception {
      
     Connection con = null;  
     CallableStatement stmt = null;  
     ResultSet rs = null;  
     
      try {  
            con = new DatabaseUtil().getConection();  
            stmt = con.prepareCall("{call consultar_documento_titulo (?)}");  
            stmt.setString(1,titulo);
            rs = stmt.executeQuery();
            
            while(rs.next()){
               
            
                Documento documento= new Documento();
               
            documento.setIdDocumento(rs.getString(1));
            documento.setTitulo(rs.getString(2));
            documento.setVirtual(rs.getBoolean(3));
            documento.setDescriptores(rs.getString(4));
            documento.setClasificacion(rs.getString(5));
            documento.setSerie(rs.getString(6));
            documento.setTotales(rs.getInt(7));
            documento.setSolicitados(rs.getInt(8));
            documento.setPrestados(rs.getInt(9));
            documento.setIdTipoDocumento(rs.getString(10));
            documento.setIdEditorial(rs.getString(11));
            documento.setAutor(rs.getString(12));
            documentos.add(documento);
            }
                    
            rs.close();

            }
      
      catch (SQLException ex) {  
           throw new SQLException(ex);  
        }  
      finally{
          con.close();
      }
   
    }
   
     public void consultar(ArrayList documentos) throws Exception {
      
     Connection con = null;  
     CallableStatement stmt = null;  
     ResultSet rs = null;  
     
      try {  
            con = new DatabaseUtil().getConection();  
        stmt = con.prepareCall("{call consultar_documento ()}"); 
            rs = stmt.executeQuery();
            

        while(rs.next()){
               Documento documento= new Documento();
            documento.setIdDocumento(rs.getString(1));
            documento.setTitulo(rs.getString(2));
            documento.setVirtual(rs.getBoolean(3));
            documento.setDescriptores(rs.getString(4));
            documento.setClasificacion(rs.getString(5));
            documento.setSerie(rs.getString(6));
            documento.setTotales(rs.getInt(7));
            documento.setSolicitados(rs.getInt(8));
            documento.setPrestados(rs.getInt(9));
            documento.setIdTipoDocumento(rs.getString(10));
            documento.setIdEditorial(rs.getString(11));
            documento.setAutor(rs.getString(12));
            documentos.add(documento);
}     
            rs.close();

            }
      
      catch (SQLException ex) {  
           throw new SQLException(ex);  
        }  
      finally{
          con.close();
      }
   
    }
     
     public void buscarPorAutor(ArrayList documentos, String id) throws Exception {
      
     Connection con = null;  
     CallableStatement stmt = null;  
     ResultSet rs = null;  
     
      try {  
            con = new DatabaseUtil().getConection();  
            stmt = con.prepareCall("{call consultar_documento_autor (?)}"); 
            stmt.setString(1,id);
            rs = stmt.executeQuery();
            while(rs.next()){
            Documento documento= new Documento();
            documento.setIdDocumento(rs.getString(1));
            documento.setTitulo(rs.getString(2));
            documento.setVirtual(rs.getBoolean(3));
            documento.setDescriptores(rs.getString(4));
            documento.setClasificacion(rs.getString(5));
            documento.setSerie(rs.getString(6));
            documento.setTotales(rs.getInt(7));
            documento.setSolicitados(rs.getInt(8));
            documento.setPrestados(rs.getInt(9));
            documento.setIdTipoDocumento(rs.getString(10));
            documento.setIdEditorial(rs.getString(11));
             documento.setAutor(rs.getString(12));
            documentos.add(documento);
            }
            rs.close();

            }
      
      catch (SQLException ex) {  
           throw new SQLException(ex);  
        }  
      finally{
          con.close();

      }
   
    }
}
